package com.jinzhi.sys.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.jinzhi.api.pojo.vo.TokenVO;
import com.jinzhi.common.base.CoreService;
import com.jinzhi.common.utils.Result;
import com.jinzhi.sys.domain.UserDO;
import com.jinzhi.sys.domain.UserDetailDO;
import com.jinzhi.sys.vo.UserVO;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <pre>
 * </pre>
 * 
 * <small> 2018年3月23日 | Aron</small>
 */
@Service
public interface UserService extends CoreService<UserDO> {

    boolean insertNoPW(UserDO userDO);

    boolean exist(Map<String, Object> params);

    boolean insertUserRole(Long roleId, Long userId);

    Set<String> listRoles(Long userId);

    Result<?> resetPwd(UserVO userVO, UserDO userDO);

    Page<Map<Object,Object>> selectUserBy1and2(int pageNumber, int pageSize,String name);

    int adminResetPwd(UserVO userVO);

    /** 申请token */
    TokenVO getToken(String mobile) ;
    /** 刷新token */
    TokenVO refreshToken(String mobile, String refreshToken);
    /** 检查token是否有效：未超时、未注销*/
    void verifyToken(String token,boolean isRefresh);
    /** 注销token */
    void logoutToken(String token, String refreshToken);

    /**
     * 更新个人信息
     * 
     * @param userDO
     * @return
     */
    int updatePersonal(UserDO userDO);

    //修改机构信息为空
    int updayeOrg(UserDO userDO);

    /**
     * 更新个人图片
     * 
     * @param file
     *            图片
     * @param avatar_data
     *            裁剪信息
     * @param userId
     *            用户ID
     * @throws Exception
     */
    Map<String, Object> updatePersonalImg(MultipartFile file, String avatar_data, Long userId) throws Exception;

    //根据微信code查询用户是否以及绑定
    UserDO getuserWx(String wxcode);
    //根据手机号查询用户
    Long userPhone(String phone);

    String userNamegetId(Long userId);

    //查询用户ID
    UserDO getByUserId(Long userId);

    //通过用户id查询用户详情信息
    UserDetailDO getByUserDetailId(Long id);

    //编辑用户信息更新数据
    int updateUserDetail(UserDetailDO userDetailDO);

    //查询用户绑定手机号
    UserDO getMobile(String mobile);

    //查询用户绑定身份证
    UserDO getIdNumber(String idNumber);

    List<UserDO>  selectListByPhoneAndIdNumber(List<String> phoneList, List<String> idNumberList);
}
